class Query {
	/**
	 * @param {object} geom 通过交互式的画笔拿到的对象type='box'
	 * @param {object} service {docName,layerId}
	 */
	/* 封装的基于几何图形查询 */
	static queryByGeom({ geom, service, callback }) {
		var queryStruct = new Zondy.Service.QueryFeatureStruct();
		//是否包含几何图形信息
		queryStruct.IncludeGeometry = true;
		//是否包含属性信息
		queryStruct.IncludeAttribute = true;
		//是否包含图形显示参数
		queryStruct.IncludeWebGraphic = false;
		//2、创建一个用于查询的区,根据画布创建的几何图形进行查询
		var geomObj = new Zondy.Object.Polygon();
		geomObj.setByOL(geom);
		//3、设置查询参数
		var rule = new Zondy.Service.QueryFeatureRule({
			//是否将要素的可见性计算在内
			EnableDisplayCondition: false,
			//是否完全包含
			MustInside: false,
			//是否仅比较要素的外包矩形
			CompareRectOnly: false,
			//是否相交
			Intersect: true,
		});
		//实例化查询参数对象
		var queryParam = new Zondy.Service.QueryParameter({
			geometry: geomObj,
			resultFormat: 'json',
			struct: queryStruct,
			rule: rule,
		});
		queryParam.pageIndex = 0;
		//设置查询要素数目
		queryParam.recordNumber = 1000;
		//4、调用服务,实现查询
		var queryService = new Zondy.Service.QueryDocFeature(
			queryParam,
			service.docName,
			service.layerId,
			{
				ip: 'localhost',
				port: '6163', //访问IGServer的端口号，.net版为6163，Java版为8089
			}
		);
		//执行查询操作，querySuccess为查询回调函数
		queryService.query(callback);
	}
	/* 根据属性查询 核心where */
	static queryBySql({ where, service, callback }) {
		/* 实现属性查询语句 */
		//1、确定查询结构
		var queryStruct = new Zondy.Service.QueryFeatureStruct();
		//是否包含几何图形信息
		queryStruct.IncludeGeometry = true;
		//是否包含属性信息
		queryStruct.IncludeAttribute = true;
		//是否包含图形显示参数
		queryStruct.IncludeWebGraphic = false;
		//2、实例化查询参数
		var queryParam = new Zondy.Service.QueryParameter({
			resultFormat: 'json',
			struct: queryStruct,
		});
		/* 设置查询条件 */
		queryParam.where = where;
		//设置查询分页号
		queryParam.pageIndex = 0;
		//设置查询要素数目
		queryParam.recordNumber = 1000;
		/* 3、调用服务器 */
		//实例化地图文档查询服务对象
		var queryService = new Zondy.Service.QueryDocFeature(
			queryParam,
			service.docName,
			service.layerId,
			{
				ip: 'localhost',
				port: '6163', //访问IGServer的端口号，.net版为6163，Java版为8089
			}
		);
		//执行查询操作，querySuccess为查询回调函数
		queryService.query(callback);
	}

	// 查询线图层的所有要素，最大数目设置为1000
	static queryLines({ service, callback }) {
		// 1 初始化查询结构对象，设置查询结构包含几何信息
		var queryStruct = new Zondy.Service.QueryFeatureStruct();
		// console.log(queryStruct)
		//{IncludeAttribute: true, IncludeGeometry: false, IncludeWebGraphic: false}
		queryStruct.IncludeGeometry = true; // 默认为false  就不查询几何信息
		queryStruct.IncludeWebGraphic = true; // 默认为false  不查询样式信息
		//是否包含属性信息
		queryStruct.IncludeAttribute = true;
		// 3 实例化查询参数对象  查询规则
		var queryParam = new Zondy.Service.QueryParameter({
			resultFormat: 'json',
			struct: queryStruct,
		});
		//设置查询分页号
		queryParam.pageIndex = 0;
		//设置查询要素数目
		queryParam.recordNumber = 1000;
		// 4 实例化地图文档查询服务对象
		var queryService = new Zondy.Service.QueryDocFeature(
			queryParam,
			service.docName,
			service.layerId,
			{
				ip: 'localhost',
				port: '6163', //访问IGServer的端口号，.net版为6163，Java版为8089
			}
		);
		//执行查询操作，querySuccess为查询成功回调函数
		queryService.query(callback);
	}
	/* 查询居民区 即区图层  的所有要素 */
	static queryAreas({ service, callback }) {
		// 1 初始化查询结构对象，设置查询结构包含几何信息
		var queryStruct = new Zondy.Service.QueryFeatureStruct();
		//{IncludeAttribute: true, IncludeGeometry: false, IncludeWebGraphic: false}
		queryStruct.IncludeGeometry = true; // 默认为false  就不查询几何信息
		queryStruct.IncludeWebGraphic = true; // 默认为false  不查询样式信息
		//是否包含属性信息
		queryStruct.IncludeAttribute = true;
		// 3 实例化查询参数对象  查询规则
		var queryParam = new Zondy.Service.QueryParameter({
			resultFormat: 'json',
			struct: queryStruct,
		});
		//设置查询分页号
		queryParam.pageIndex = 0;
		//设置查询要素数目
		queryParam.recordNumber = 1000;
		// 4 实例化地图文档查询服务对象
		var queryService = new Zondy.Service.QueryDocFeature(
			queryParam,
			service.docName,
			service.layerId,
			{
				ip: 'localhost',
				port: '6163', //访问IGServer的端口号，.net版为6163，Java版为8089
			}
		);
		//执行查询操作，querySuccess为查询成功回调函数
		queryService.query(callback);
	}
	/* 通过url查询要素 */
	static querybygdbUrl(url, callback) {
		//初始化查询结构对象，设置查询结构包含几何信息
		const queryStruct = new Zondy.Service.QueryFeatureStruct();
		queryStruct.IncludeGeometry = true;
		//实例化查询参数对象
		const queryParam = new Zondy.Service.QueryByLayerParameter(url, {
			resultFormat: 'json',
			struct: queryStruct,
		});
		queryParam.where = '1>0';
		//实例化地图文档查询服务对象
		const queryService = new Zondy.Service.QueryLayerFeature(queryParam, {
			ip: 'localhost',
			port: '6163', //访问IGServer的端口号，.net版为6163，Java版为8089
		});
		//执行查询操作，callback为查询回调函数
		queryService.query(callback);
	}
}

export { Query };
